import rehypeKatex from 'rehype-katex';
import remarkMath from 'remark-math';
import 'katex/dist/katex.css';

/**
 * LaTeX语法支持配置
 * 提供数学公式渲染功能
 */
export const latexSupport = {
  // rehype插件配置
  rehypePlugins: [
    [rehypeKatex, { output: 'html' }]
  ],
  
  // remark插件配置
  remarkPlugins: [remarkMath],
  
  // 获取完整的LaTeX支持配置
  getPreviewOptions: () => ({
    rehypePlugins: latexSupport.rehypePlugins,
    remarkPlugins: latexSupport.remarkPlugins,
  }),
  
  // 检查文本是否包含LaTeX语法
  hasLatexContent: (text: string): boolean => {
    const latexPatterns = [
      /\$\$[\s\S]*?\$\$/,  // 块级数学公式
      /\$[^\$\n]*\$/,      // 行内数学公式
      /\\\([\s\S]*?\\\)/,  // 行内数学公式 (LaTeX风格)
      /\\\[[\s\S]*?\\\]/,  // 块级数学公式 (LaTeX风格)
    ];
    
    return latexPatterns.some(pattern => pattern.test(text));
  },
  
  // 提取文本中的LaTeX内容
  extractLatexContent: (text: string): string[] => {
    const latexPatterns = [
      /\$\$([\s\S]*?)\$\$/g,      // 块级数学公式
      /\$([^\$\n]*)\$/g,          // 行内数学公式
      /\\\(([\s\S]*?)\\\)/g,      // 行内数学公式 (LaTeX风格)
      /\\\[([\s\S]*?)\\\]/g,      // 块级数学公式 (LaTeX风格)
    ];
    
    const results: string[] = [];
    
    latexPatterns.forEach(pattern => {
      let match;
      while ((match = pattern.exec(text)) !== null) {
        results.push(match[1] || match[0]);
      }
    });
    
    return results;
  }
};
